package com.ry.xingyunerp.utils;

import com.ry.xingyunerp.entity.vo.MenuVo;

import java.util.ArrayList;
import java.util.List;

public class TreeUtil {

    //递归算法
    public static List<MenuVo> toTree(List<MenuVo> treeList, Long pid) {
        List<MenuVo> retList = new ArrayList<MenuVo>();
        for (MenuVo parent : treeList) {
            if (pid.equals(parent.getPid())) {
                retList.add(findChildren(parent, treeList));
            }
        }
        return retList;
    }
    private static MenuVo findChildren(MenuVo parent, List<MenuVo> treeList) {
        //遍历当前的菜单集合,菜单集合就是数据库中的sys_menu表中的数据
        for (MenuVo child : treeList) {
            //如果当前菜单的id等于父菜单的pid,则说明当前菜单是父菜单的子菜单  0=0 1=1 证明child是子类菜单信息
            if (parent.getId().equals(child.getPid())) {
                //如果当前菜单的子菜单为空,则创建一个子菜单集合
                if (parent.getChild() == null) {
                    parent.setChild(new ArrayList<>());
                }
                //如果不是使用递归，使用的是循环，只执行一轮，把满足条件的对象add进去就可以了
                //parent.getChild().add(child);
                //这里就是递归循环查询子类，直到没有子类为止
                parent.getChild().add(findChildren(child, treeList));
            }
        }
        return parent;
    }
    }
